package admin

import (
	"gitee.com/gopher2011/gin"
	"gitee.com/gopher2011/mall/app/dao"
	"gitee.com/gopher2011/mall/app/service"
	"net/http"
	"strconv"
)

// 后台用户角色管理 /role
var UmsRole = &umsRoleApi{}

// 用户角色表
type umsRoleApi struct{}

// 添加角色 /create Post 参数: dao.UmsRole
func (it *umsRoleApi) Create(r *gin.Context) {
	var p dao.UmsRole
	err := r.Parse(&p)
	if err != nil {
		r.JSON(http.StatusBadRequest, gin.H{"msg": err.Error()})
		r.Abort()
	}
	res, err := service.UmsRole.Create(&p)
	if err != nil {
		r.JSON(http.StatusBadRequest, gin.H{"msg": "添加角色失败!"})
		r.Abort()
	} else {
		r.JSON(http.StatusOK, gin.H{"msg": "添加角色成功!", "data": res})
	}
}

// 修改角色 /update/:id Post 参数: dao.UmsRole
func (it *umsRoleApi) Update(r *gin.Context) {
	ids := r.Param("id")
	atoi, _ := strconv.Atoi(ids)
	var p dao.UmsRole
	err := r.Parse(&p)
	if err != nil {
		r.JSON(http.StatusBadRequest, gin.H{"msg": err.Error()})
		r.Abort()
	}
	res, err := service.UmsRole.Update(int64(atoi), &p)
	if err != nil {
		r.JSON(http.StatusBadRequest, gin.H{"msg": "修改角色失败!"})
		r.Abort()
	} else {
		r.JSON(http.StatusOK, gin.H{"msg": "修改角色成功!", "data": res})
	}
}

// 批量删除角色 /delete Post 输入参数为: ids
func (it *umsRoleApi) Delete(r *gin.Context) {
	list := r.PostFormArray("ids")
	var res []int64
	for _, item := range list {
		id, _ := strconv.Atoi(item)
		res = append(res, int64(id))
	}
	data, err := service.UmsRole.Delete(res)
	if err != nil {
		r.JSON(http.StatusBadRequest, gin.H{"msg": "批量删除角色失败!"})
		r.Abort()
	} else {
		r.JSON(http.StatusOK, gin.H{"msg": "批量删除角色成功!", "data": data})
	}
}

// 获取所有角色 /listAll Get
func (it *umsRoleApi) ListAll(r *gin.Context) {
	list, err := service.UmsRole.ListAll()
	if err != nil {
		r.JSON(http.StatusBadRequest, gin.H{"msg": "获取所有角色失败!"})
		r.Abort()
	} else {
		r.JSON(http.StatusOK, gin.H{"msg": "获取所有角色成功!", "data": list})
	}
}

// 根据角色名称分页获取角色列表 /list Get
func (it *umsRoleApi) List(r *gin.Context) {
	var l dao.UmsRoleList
	r.Parse(&l)
	list, err := service.UmsRole.List(l)
	if err != nil {
		r.JSON(400, gin.H{"msg": "获取用户角色列表失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "获取用户角色列表成功", "data": list})
	}
}

// 修改角色状态 /updateStatus/:id Post 参数: id,status
func (it *umsRoleApi) UpdateStatus(r *gin.Context) {
	idStr := r.Param("id")
	id, _ := strconv.Atoi(idStr)
	form := r.PostForm("status")
	status, _ := strconv.Atoi(form)
	res, err := service.UmsRole.UpdateStatus(int64(id), int32(status))
	if err != nil {
		r.JSON(400, gin.H{"msg": "修改用户角色状态失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "修改用户角色状态成功", "data": res})
	}
}

// 获取角色相关菜单 listMenu/:role_id Get 参数: role_id
func (it *umsRoleApi) ListMenu(r *gin.Context) {
	idStr := r.Param("role_id")
	id, _ := strconv.Atoi(idStr)
	res, err := service.UmsRole.ListMenu(int64(id))
	if err != nil {
		r.JSON(400, gin.H{"msg": "获取角色相关菜单失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "获取角色相关菜单成功", "data": res})
	}
}

// 获取角色相关资源 /listResource/:role_id Get 参数: role_id
func (it *umsRoleApi) ListResource(r *gin.Context) {
	idStr := r.Param("role_id")
	id, _ := strconv.Atoi(idStr)
	res, err := service.UmsRole.ListResource(int64(id))
	if err != nil {
		r.JSON(400, gin.H{"msg": "获取角色相关资源失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "获取角色相关资源成功", "data": res})
	}
}

// 给角色分配菜单 /allocMenu Post 参数:dao.UmsRoleAllocMenu
func (it *umsRoleApi) AllocMenu(r *gin.Context) {
	var p dao.UmsRoleAllocMenu
	r.Parse(&p)
	res, err := service.UmsRole.AllocMenu(&p)
	if err != nil {
		r.JSON(400, gin.H{"msg": "给角色分配菜单失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "给角色分配菜单成功", "data": res})
	}
}

// 给角色分配资源 /allocResource Post 参数: dao.UmsRoleAllocResource
func (it *umsRoleApi) AllocResource(r *gin.Context) {
	var p dao.UmsRoleAllocResource
	r.Parse(&p)
	res, err := service.UmsRole.AllocResource(&p)
	if err != nil {
		r.JSON(400, gin.H{"msg": "给角色分配资源失败"})
		r.Abort()
	} else {
		r.JSON(200, gin.H{"msg": "给角色分配资源成功", "data": res})
	}
}
